7.11.1 型アサーション
型アサーションは実行時にチェックされ、カンマ ok イディオムでチェックしないとパニックを引き起こす危険性がある
code:go
type MyInt int
func main() {
var i any
var mine MyInt = 20
i = mine // mineの型はMyInt。iはanyなので代入できる
i2 := i.(int) // iに代入された型はMyIntなので、パニック!
fmt.Println(i2)
}
そのため、型アサーションに間違いがないと確信していても、カンマ ok イディオムを使用することを推奨
code:go
type MyInt int
func main() {
var i any
var mine MyInt = 20
i = mine
i2, ok := i.(int)
if !ok {
err := fmt.Errorf("iの型(値:%v)が想定外です", i)
fmt.Println(err.Error())
os.Exit(1) // プログラムを終了
}
fmt.Println(i2)
}